package cn.caplike.demo.repository.design.pattern.proxy.cglib.extend;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * 简介：目标对象拦截器，实现MethodInterceptor
 *
 * @author 李珂 2018年5月8日 上午10:53:16
 */
public class TargetInterceptor implements MethodInterceptor {

	/**
	 * 简介：重新方法拦截在方法前和方法后加入业务
	 *
	 * @param obj    为目标对象
	 * @param method 为目标方法
	 * @param args   为参数
	 * @param proxy  方法代理对象
	 */
	@Override
	public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
		System.out.println("---> TargetInterceptor: 调用前...");
		Object result = proxy.invokeSuper(obj, args);
		System.out.println(method.getName() + " 执行结果: " + result);
		System.out.println("---> TargetInterceptor: 调用后...");
		return result;
	}
}
